home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Languages / Oberon⁄F™ 1.1 / Dev / Rsrc / New / Views5 (.txt) < prev   
Encoding:
Oberon Document  |  1995-08-09  |  8.0 KB  |  237 lines  |  [oODC/obnF]

  1. Documents.StdDocumentDesc
  2. Documents.DocumentDesc
  3. Containers.ViewDesc
  4. Views.ViewDesc
  5. Stores.StoreDesc
  6. Documents.ModelDesc
  7. Containers.ModelDesc
  8. Models.ModelDesc
  9. Stores.ElemDesc
  10. TextViews.StdViewDesc
  11. TextViews.ViewDesc
  12. TextModels.StdModelDesc
  13. TextModels.ModelDesc
  14. TextModels.AttributesDesc
  15. Helvetica
  16. Helvetica
  17. Helvetica
  18. StdStamps.StdViewDesc
  19. Helvetica
  20. Helvetica
  21. Helvetica
  22. MODULE NewViews;
  23.     IMPORT Domains, Ports, Stores, Models, Views, Controllers, Properties, NewModels;
  24.     CONST
  25.         minVersion = 0; maxVersion = 0;
  26.     TYPE
  27.         View* = POINTER TO ViewDesc;
  28.         ViewDesc* = RECORD (Views.ViewDesc) END;
  29.         Directory* = POINTER TO DirectoryDesc;
  30.         DirectoryDesc* = RECORD END;
  31.         StdView = POINTER TO RECORD (ViewDesc)
  32.             model: NewModels.Model;
  33.             (* view fields *)
  34.         END;
  35.         StdDirectory = POINTER TO RECORD (DirectoryDesc) END;
  36.         Op = POINTER TO RECORD (Domains.OperationDesc)
  37.             view: StdView;
  38.             (* view-operation fields *)
  39.         END;
  40.     VAR dir-, stdDir-: Directory;
  41.     (** View **)
  42.     PROCEDURE (v: View) Internalize* (VAR rd: Stores.Reader);
  43.         VAR version: SHORTINT;
  44.     BEGIN
  45.         v.Internalize^(rd);
  46.         IF ~rd.cancelled THEN
  47.             rd.ReadVersion(minVersion, maxVersion, version)
  48.         END
  49.     END Internalize;
  50.     PROCEDURE (v: View) Externalize* (VAR wr: Stores.Writer);
  51.     BEGIN
  52.         v.Externalize^(wr);
  53.         wr.WriteVersion(maxVersion)
  54.     END Externalize;
  55.     PROCEDURE (v: View) ThisModel* ():  NewModels.Model;
  56.     BEGIN
  57.         HALT(127)
  58.     END ThisModel;
  59.     (** Directory **)
  60.     PROCEDURE (d: Directory) New* (m: NewModels.Model): View;
  61.     BEGIN
  62.         HALT(127)
  63.     END New;
  64.     (* Op *)
  65.     PROCEDURE (op: Op) Do;
  66.     BEGIN
  67.         (* perform view operation *)
  68.         Views.Update(op.view, Views.keepFrames)    (* restore v in any frame that displays it *)
  69.     END Do;
  70.     PROCEDURE NewOp (view: View (* additional parameters *) ): Op;
  71.         VAR op: Op;
  72.     BEGIN
  73.         ASSERT(view # NIL, 20);
  74.         NEW(op);
  75.         (* set up operation parameters *)
  76.         RETURN op
  77.     END NewOp;
  78.     (* StdView *)
  79.     PROCEDURE (v: StdView) Internalize (VAR rd: Stores.Reader);
  80.         VAR version: SHORTINT; st: Stores.Store;
  81.     BEGIN
  82.         ASSERT(v.model = NIL, 20);
  83.         v.Internalize^(rd);
  84.         IF ~rd.cancelled THEN
  85.             rd.ReadVersion(minVersion, maxVersion, version);
  86.             IF ~rd.cancelled THEN
  87.                 rd.ReadStore(st);
  88.                 IF (st # NIL) & (st IS NewModels.Model) THEN
  89.                     v.InitModel(st(NewModels.Model));
  90.                     (* read view fields *)
  91.                 ELSE
  92.                     rd.TurnIntoAlien(Stores.alienComponent)    (* cancel internalization of v *)
  93.                 END
  94.             END
  95.         END
  96.     END Internalize;
  97.     PROCEDURE (v: StdView) Externalize (VAR wr: Stores.Writer);
  98.     BEGIN
  99.         ASSERT(v.model # NIL, 20);
  100.         v.Externalize^(wr);
  101.         wr.WriteVersion(maxVersion);
  102.         wr.WriteStore(v.model);
  103.         (* write view fields *)
  104.     END Externalize;
  105.     PROCEDURE (v: StdView) CopyFrom (source: Views.View);
  106.     BEGIN
  107.         (*ASSERT(v not yet initialized, except for model, 20);*)
  108.         ASSERT(source # NIL, 21);
  109.         ASSERT(Stores.SameType(v, source), 23);
  110.         ASSERT(v.model # NIL, 24);
  111.         v.CopyFrom^(source);
  112.         WITH source: StdView DO
  113.             ASSERT(source.model # NIL, 22);
  114.             (* copy view fields *)
  115.             IF v.model # source.model THEN
  116.                 (*
  117.                     Check and possibly update or initialize v's state which refers to its model.
  118.                     Example: scroll position is set to a legal value, e.g. to the beginning
  119.                 *)
  120.             END
  121.         END
  122.     END CopyFrom;
  123.     PROCEDURE (v: StdView) InitModel (m: Models.Model);
  124.     BEGIN
  125.         ASSERT(m # NIL, 20);
  126.         (*ASSERT(m already initialized, 21);*)
  127.         ASSERT((v.model = NIL) OR (v.model = m), 22);
  128.         ASSERT(m IS NewModels.Model, 23);
  129.         v.model := m(NewModels.Model)
  130.     END InitModel;
  131.     PROCEDURE (v: StdView) ThisModel (): NewModels.Model;
  132.     BEGIN
  133.         ASSERT(v.model # NIL, 100);
  134.         RETURN v.model
  135.     END ThisModel;
  136.     PROCEDURE (v: StdView) Restore (f: Views.Frame; l, t, r, b: LONGINT);
  137.         VAR w, h: LONGINT;
  138.     BEGIN
  139.         (* restore foreground in rectangle (l, t, r, b) *)
  140.         (* replace the body of this procedure with your Restore behavior *)
  141.         v.context.GetSize(w, h);
  142.         f.DrawLine(0, 0, w, h, f.dot, Ports.red)
  143.     END Restore;
  144.     PROCEDURE (v: StdView) HandleModelMsg (VAR msg: Models.Message);
  145.     BEGIN
  146.         ASSERT(msg.model # NIL, 20); ASSERT(msg.model = v.model, 21);
  147.         WITH msg: Models.UpdateMsg DO
  148.             WITH msg: NewModels.UpdateMsg DO
  149.                 (* calculate bounding box of area to restore, and then call
  150.                 Views.UpdateIn(v, l, t, r, b, Views.keepFrames)
  151.                 *)
  152.             ELSE
  153.                 Views.Update(v, Views.keepFrames)    (* restore v in any frame that displays it *)
  154.             END
  155.         ELSE    (* ignore other messages *)
  156.         END
  157.     END HandleModelMsg;
  158.     PROCEDURE (v: StdView) HandleCtrlMsg (f: Views.Frame; VAR msg: Controllers.Message;
  159.                                                                                         VAR focus: Views.View);
  160.     BEGIN
  161.         ASSERT(focus = NIL, 23);
  162.         WITH msg: Controllers.PollOpsMsg DO
  163.             (* specify which editing operations are supported *)
  164.         | msg: Controllers.TrackMsg DO
  165.             (* implement mouse tracking *)
  166.         | msg: Controllers.EditMsg DO
  167.             (* implement editing operations *)
  168.         ELSE    (* ignore other messages *)
  169.         END
  170.     END HandleCtrlMsg;
  171.     PROCEDURE (v: StdView) HandlePropMsg (VAR p: Properties.Message);
  172.         CONST defaultWidth = 100 * Ports.mm; defaultHeight = 70 * Ports.mm;
  173.     BEGIN
  174.         WITH p: Properties.FocusPref DO
  175.             p.atLocation := FALSE; p.hotFocus := FALSE; p.setFocus := TRUE; p.selectOnFocus := TRUE
  176.         | p: Properties.SizePref DO
  177.             IF p.w = Views.undefined THEN p.w := defaultWidth END;
  178.             IF p.h = Views.undefined THEN p.h := defaultHeight END
  179.         ELSE    (* ignore other messages *)
  180.         END
  181.     END HandlePropMsg;
  182.     (* StdDirectory *)
  183.     PROCEDURE (d: StdDirectory) New (m: NewModels.Model): View;
  184.         VAR v: StdView;
  185.     BEGIN
  186.         ASSERT(m # NIL, 20);
  187.         (*ASSERT(m already initialized, 21);*)
  188.         NEW(v); v.InitModel(m);
  189.         (* initialize view fields *)
  190.         RETURN v
  191.     END New;
  192.     (** miscellaneous **)
  193.     PROCEDURE Focus* (): View;
  194.         VAR v: Views.View;
  195.     BEGIN
  196.         v := Controllers.FocusView();
  197.         IF (v # NIL) & (v IS View) THEN RETURN v(View) ELSE RETURN NIL END
  198.     END Focus;
  199.     PROCEDURE FocusModel* (): NewModels.Model;
  200.         VAR v: Views.View;
  201.     BEGIN
  202.         v := Controllers.FocusView();
  203.         IF (v # NIL) & (v IS View) THEN RETURN v(View).ThisModel() ELSE RETURN NIL END
  204.     END FocusModel;
  205.     PROCEDURE New* (): View;
  206.     BEGIN
  207.         RETURN dir.New(NewModels.New())
  208.     END New;
  209.     PROCEDURE Deposit*;
  210.     BEGIN
  211.         Views.Deposit(New())
  212.     END Deposit;
  213.     PROCEDURE SetDir* (d: Directory);
  214.     BEGIN
  215.         ASSERT(d # NIL, 20);
  216.         dir := d
  217.     END SetDir;
  218.     PROCEDURE Init;
  219.         VAR d: StdDirectory;
  220.     BEGIN
  221.         NEW(d); stdDir := d; dir := d
  222.     END Init;
  223. BEGIN
  224.     Init
  225. END NewViews.
  226. TextControllers.StdCtrlDesc
  227. TextControllers.ControllerDesc
  228. Containers.ControllerDesc
  229. Controllers.ControllerDesc
  230. TextRulers.StdRulerDesc
  231. TextRulers.RulerDesc
  232. TextRulers.StdStyleDesc
  233. TextRulers.StyleDesc
  234. TextRulers.AttributesDesc
  235. Helvetica
  236. Documents.ControllerDesc
  237.